package es.uned.etsii.si3.taller;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.j256.ormlite.field.DataType;
import java.util.Date;
import java.sql.SQLException;

@DatabaseTable(tableName = "reparacion")
public class Reparacion extends Persistente {
	public static final String ID_FIELD_NAME = "id";	
	public static final String ID_USUARIO_FIELD_NAME = "id_usuario";
	public static final String ID_SECCION_FIELD_NAME = "id_seccion";
	public static final String ID_PARTETRABAJO_FIELD_NAME = "id_parteTrabajo";
	public static final String DESCRIPCION_FIELD_NAME = "descripcion";
	public static final String FECHAENTRADA_FIELD_NAME = "fechaEntrada";
	public static final String FECHAESTIMADA_FIELD_NAME = "fechaEstimada";
	public static final String FECHAFIN_FIELD_NAME = "fechaFin";
	public static final String FECHASALIDA_FIELD_NAME = "fechaSalida";
	public static final String VISTOBUENO_FIELD_NAME = "vistoBueno";
	public static final String ID_SECCION_SIGUIENTE_NAME = "id_seccion_siguiente";

	@DatabaseField(generatedId = true)
	int id;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_USUARIO_FIELD_NAME)
	Usuario usuario;		//jefe seccion
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_SECCION_FIELD_NAME)
	Seccion seccion;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_PARTETRABAJO_FIELD_NAME)
	ParteTrabajo parteTrabajo;
	@DatabaseField(width = 100)
	String descripcion;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaEntrada;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaEstimada;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaFin;
	@DatabaseField(dataType=DataType.DATE)
	Date fechaSalida;
	@DatabaseField
	boolean vistoBueno;
	@DatabaseField(foreign = true, maxForeignAutoRefreshLevel=5, foreignAutoRefresh=true, columnName = ID_SECCION_SIGUIENTE_NAME)
	Seccion siguienteSeccion;
	
	/**
	 * Crea un objeto Reparación a partir de los parámetros indicados.
	 * Las reparaciones están asociadas a un parte de trabajo dado
	 * 
	 * @param usuario
	 * @param seccion
	 * @param parteTrabajo
	 * @param descripcion
	 * @param fechaEntrada
	 * @param fechaEstimada
	 * @param fechaFin
	 * @param fechaSalida
	 * @param vistoBueno
	 * @param siguienteSeccion
	 * @return el objeto creado
	 * @throws SQLException
	 */
	public
	static Reparacion crear(Usuario usuario, Seccion seccion, ParteTrabajo parteTrabajo, 
			String descripcion, Date fechaEntrada, Date fechaEstimada, Date fechaFin,
			Date fechaSalida, boolean vistoBueno, Seccion siguienteSeccion) 
			throws SQLException
	{
		Reparacion reparacion = new Reparacion();

		reparacion.setUsuario(usuario);
		reparacion.setSeccion(seccion);
		reparacion.setParteTrabajo(parteTrabajo);
		reparacion.setDescripcion(descripcion);
		reparacion.setFechaEntrada(fechaEntrada);
		reparacion.setFechaEstimada(fechaEstimada);
		reparacion.setFechaFin(fechaFin);
		reparacion.setFechaSalida(fechaSalida);
		reparacion.setVistoBueno(vistoBueno);
		reparacion.setSiguienteSeccion(siguienteSeccion);
		getClassDao(Reparacion.class).create(reparacion);

		return reparacion;
	}

	public
	Reparacion() {
		// ORM Lite necesita un constructor por defecto
	}

	/** 
	 * getters y setters
	 * 
	 */
	public int         	getId()          		{ return id; }
	public Usuario			getUsuario()	 		{ return usuario; }
	public Seccion     	getSeccion()      		{ return seccion; }
	public ParteTrabajo	getParteTrabajo() 		{ return parteTrabajo; }
	public String 			getDescripcion() 		{ return descripcion; }
	public Date 			getFechaEntrada() 		{ return fechaEntrada; }
	public Date 			getFechaEstimada() 		{ return fechaEstimada; }
	public Date 			getFechaFin()	 		{ return fechaFin; }
	public Date 			getFechaSalida() 		{ return fechaSalida; }
	public boolean			getVistoBueno()			{ return vistoBueno; }
	public Seccion			getSiguienteSeccion()	{return siguienteSeccion; }
	
	public
	void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public
	void setSeccion(Seccion seccion) {
		this.seccion = seccion;
	}

	public
	void setParteTrabajo(ParteTrabajo parteTrabajo) {
		this.parteTrabajo = parteTrabajo;
	}

	public
	void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public
	void setFechaEntrada(Date fechaEntrada) {
		this.fechaEntrada = fechaEntrada;
	}

	public
	void setFechaEstimada(Date fechaEstimada) {
		this.fechaEstimada = fechaEstimada;
	}

	public
	void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public
	void setFechaSalida(Date fechaSalida) {
		this.fechaSalida = fechaSalida;
	}

	public
	void setVistoBueno(boolean vistoBueno) {
		this.vistoBueno = vistoBueno;
	}

	public
	void setSiguienteSeccion(Seccion siguienteSeccion) {
		this.siguienteSeccion = siguienteSeccion;
	}
}